From cb311fd12f1769a28dbc9e638fc5d57a52e34e8b Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Wed, 4 Feb 2009 01:55:07 +0000 Subject: [PATCH] (Fchar_charset): New optional arg restriction. --- src/charset.c | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/src/charset.c b/src/charset.c index b2b52870986..052f3186831 100644 --- a/src/charset.c +++ b/src/charset.c @@ -2098,15 +2098,41 @@ CH in the charset. */) } -DEFUN ("char-charset", Fchar_charset, Schar_charset, 1, 1, 0, - doc: /* Return the charset of highest priority that contains CH. */) - (ch) - Lisp_Object ch; +DEFUN ("char-charset", Fchar_charset, Schar_charset, 1, 2, 0, + doc: /* Return the charset of highest priority that contains CH. +If optional 2nd arg RESTRICTION is non-nil, it is a list of charsets +from which to find the charset. It may also be a coding system. In +that case, find the charset from what supported by that coding system. */) + (ch, restriction) + Lisp_Object ch, restriction; { struct charset *charset; CHECK_CHARACTER (ch); - charset = CHAR_CHARSET (XINT (ch)); + if (NILP (restriction)) + charset = CHAR_CHARSET (XINT (ch)); + else + { + Lisp_Object charset_list; + + if (CONSP (restriction)) + { + for (charset_list = Qnil; CONSP (restriction); + restriction = XCDR (restriction)) + { + int id; + + CHECK_CHARSET_GET_ID (XCAR (restriction), id); + charset_list = Fcons (make_number (id), charset_list); + } + charset_list = Fnreverse (charset_list); + } + else + charset_list = coding_system_charset_list (restriction); + charset = char_charset (XINT (ch), charset_list, NULL); + if (! charset) + return Qnil; + } return (CHARSET_NAME (charset)); } -- 2.30.2